#ifndef HISI_DEV_H
#define HISI_DEV_H
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* End of #ifdef __cplusplus */
#include <sys/types.h>

//获取网卡状态
//idx : 0 eth0, 1 = eth1, .....
//return 0 正常    -1异常
int avic_getNetStatus(int idx);

/**
 * @brief avic_set_heart 设置心跳发送,默认已打开，即调用avic_get_boardStatus()返回值为1
 * @param val 1:打开 0:关闭
 * @return 0:成功 否则失败
 */
int avic_set_heart(int val);

/**
 * @brief avic_SetManualBrightness 设置亮度
 * @param val:0 - 511 暗~亮
 * @return 0:成功 否则失败
 */
int avic_SetManualBrightness(unsigned short val);

/**
 * @brief avic_set_min_autobacklight  设置自动亮度最低值
 * @param val 设置自动亮度调节时，最小背光亮度(默认是100)
 *  val = 100 ~ 300
 * @return 0:成功 否则失败
 */
int avic_set_min_autobacklight(unsigned short val);

/**
* @brief avic_set_autobacklight_threshold
* 设置自动亮度调节阀值，未调用时阀值是30
* @param  val = 30~150建议设置为5的倍数
* @return 0：成功 -1：失败
*/
int avic_set_autobacklight_threshold(unsigned short val);

/**
* @brief设置自动/手动亮度
* @param state = 1 auto, state=0 manual
* 仅M1515V4版本可用
*/
void avic_SetAutoBrightness(unsigned char state);

/**
 * @brief avic_set_beep 设置蜂鸣器
 * @param val 1:打开 0:关闭
 * @return 0:成功 否则失败
 */
int avic_set_beep(int val);

/**
 * @brief avic_get_mainBoardId 获取主控板卡id，仲裁切换时，返回值会变化
 * @return 主控板卡id, 屏幕面向用户： 1左手边板卡， 2右手边板卡
 */
int avic_get_mainBoardId();

/**
 * @brief avic_get_currentBoardId 获取当前板卡id,  此返回值是板卡硬件地址，保持不变
 * @return 当前板卡id, 屏幕面向用户： 1左手边板卡， 2右手边板卡
 */
int avic_get_currentBoardId();

/**
 * @brief avic_get_cpuTemp 获取CPU温度
 * @return CPU温度
 */
float avic_get_cpuTemp();

/**
 * @brief avic_get_ainVoltage 获取设备电压值
 * @param type
 * 3：仲裁板电压ain1
 * 4：仲裁板电压ain2
 * @return 设备电压值
 */
float avic_get_ainVoltage(int type);

/**
 * @brief avic_get_boardStatus 获取设备主板状态
 * @param type
 * 0：面对设备右边板卡状态
 * 1：面对设备左边板卡状态
 * @return 1：正常,  0：异常 其他：错误
 */
int avic_get_boardStatus(int id);

/**
 * @brief avic_get_backLight 获取设备显示屏背光亮度
 * @return 显示屏背光亮度 0 - 255, 值越大，亮度越高
 */
int avic_get_backLight(void);

/**
 * @brief avic_get_envBrightness 获取设备光敏值
 * 注：左主板获取左边光敏，右主板获取右边光敏
 * 注：M1515V4设备可以调用
 * @return 设备光敏值(环境光亮度) 0 - 420
 */
int avic_get_envBrightness(void);

/**
 * @brief avic_audioCtrl 打开或关闭扬声器功能
 * @param onoff 1:打开  0:关闭
 * @return 0：成功，  -1：失败
 */
int avic_audioCtrl(int onoff);

/**
 * @brief avic_init_hisi_dev
 * 初始化hisi设备(进行其他操作前，请先调用此初始化函数，并延时1~2秒)
 * 开启心跳发送线程，默认开启心跳功能
 */
void avic_init_hisi_dev();

/**
 * @brief init_hisi_dev
 * 初始化hisi设备
 */
void avic_destory_hisi_dev();

/**
 * @brief avic_GetLibVersion 获取库版本状态
 * 去初始化hisi设备
 */
const char * avic_GetLibVersion(void);

/**
 * @brief avic_get_io_fd 获取fd句柄
 * @return fb值
 * 注：如果返回值为-1代表fb初始化失败
 */
int avic_get_io_fd();

//enum LED_NUMBER{
//    LEFT_G_LED = 1,
//    LEFT_R_LED,
//    LEFT_Y_LED,
//    RIGHT_G_LED,
//    RIGHT_R_LED,
//    RIGHT_Y_LED
//};
enum LED_NUMBER{
 LEFT_Y_LED = 1,
 LEFT_G_LED,
 LEFT_R_LED,
 RIGHT_Y_LED,
    RIGHT_G_LED,
    RIGHT_R_LED
};

/**
 * @brief avic_setLedStatus 控制设备LED灯开关
 * @param ledType led设备号，LED_NUMBER成员表示。
 * @param ledParam 0:关闭 ;1:打开
 * @return 返回值：0成功  其它失败
 */
void avic_setLedStatus(int ledType, int ledParam);

//=========================MVB=====================================
/**
 * @brief avic_mvb_init mvb初始化
 * @return 0成功，其他失败
 */
u_int8_t avic_mvb_init(void);

/**
 * @brief avic_mvb_port_init mvb 端口初始化
 * @param port_dir 0:sink   1:source
 * @param port_addr 0x000-0xfff
 * @param port_size 32/16/8/4/2
 * @return 返回值：0成功  其它失败
 */
u_int8_t avic_mvb_port_init(unsigned char port_dir,unsigned short port_addr,unsigned char port_size);

/**
 * @brief avic_mvb_start mvb 开始通讯
 * @param devaddr 0x000-0xfff 设备地址
 * @return 返回值：0成功  其它失败
 */
u_int8_t avic_mvb_start(u_int16_t devaddr);

//mvb  状态
// 返回值：0成功  其它失败
/**
 * @brief avic_mvb_status 获取mvb状态
 * @return 返回值：0成功  其它失败
 */
u_int8_t avic_mvb_status(void);

/**
 * @brief avic_mvb_putdata 端口数据发送
 * @param port_address 端口地址
 * @param data 发送数据首地址
 * @return 返回值  0正常  其它异常
 */
u_int8_t avic_mvb_putdata(unsigned short port_address, unsigned char * data);

/**
 * @brief avic_mvb_getdata 端口数据接收
 * @param port_address 端口地址
 * @param p_port_data 接收数据首地址
 * @param p_port_freshness 数据新鲜度 0-65535
 * @return 返回值: 0成功  其它异常
 */
u_int8_t avic_mvb_getdata(unsigned short port_address, unsigned char *p_port_data, unsigned short *p_port_freshness);

#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif // HISI_DEV_H
